ওয়েব অ্যাপ্লিকেশনগুলোতে ফাইল স্টোরেজ এবং সিকিউরিটি দুটি অত্যন্ত গুরুত্বপূর্ণ বিষয়। ফাইল স্টোরেজ ব্যবস্থাপনা পিএইচপি এবং MySQL এর মাধ্যমে করা সম্ভব, যেখানে ডেটাবেজে ফাইল সম্পর্কিত তথ্য (যেমন ফাইলের নাম, ধরন, এবং সাইজ) সঞ্চয় করা হয় এবং ফাইলগুলো সিস্টেমে নিরাপদভাবে সংরক্ষিত থাকে। এছাড়া ফাইল স্টোরেজের সময় সিকিউরিটি মেজারস নেওয়া জরুরি, যাতে ডেটা চুরি বা ক্ষতি না হয়। এই নিবন্ধে আমরা ফাইল স্টোরেজ এবং এর সাথে সম্পর্কিত নিরাপত্তা ব্যবস্থা নিয়ে আলোচনা করবো।
ফাইল স্টোরেজ: পিএইচপি এবং MySQL এর মাধ্যমে
ফাইল স্টোরেজ সিস্টেমে সাধারণত দুটি পদ্ধতি ব্যবহার করা হয়: এক হল ফাইল সিস্টেমে ফাইল সংরক্ষণ করা এবং অন্যটি হল ডেটাবেজে ফাইল সংরক্ষণ করা। পিএইচপি এবং MySQL ব্যবহার করে দুটি পদ্ধতিই বাস্তবায়িত করা যায়।
ফাইল সিস্টেমে ফাইল সংরক্ষণ
ফাইল সিস্টেমে ফাইল সংরক্ষণের ক্ষেত্রে, ফাইলটি সাধারণত একটি নির্দিষ্ট ডিরেক্টরিতে রাখা হয় এবং ডেটাবেজে শুধুমাত্র ফাইলের পাথ (path), নাম (name), সাইজ (size) এবং ফাইলের অন্যান্য তথ্য সংরক্ষণ করা হয়।
ফাইল আপলোড এবং ডেটাবেজে তথ্য সংরক্ষণ:
<?php
// ফাইল আপলোড চেক
if(isset($_FILES['file'])){
$file_name = $_FILES['file']['name'];
$file_tmp = $_FILES['file']['tmp_name'];
$file_size = $_FILES['file']['size'];
$file_type = $_FILES['file']['type'];
// ফাইল ডিরেক্টরি সিলেক্ট করা
$target_dir = "uploads/";
$target_file = $target_dir . basename($file_name);
// ফাইল মুভ করা
if(move_uploaded_file($file_tmp, $target_file)){
// ডেটাবেজে ফাইলের তথ্য সংরক্ষণ
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";
// ডেটাবেজ সংযোগ
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO files (file_name, file_size, file_type, file_path)
VALUES ('$file_name', '$file_size', '$file_type', '$target_file')";
if ($conn->query($sql) === TRUE) {
echo "File uploaded and information saved to database";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
}
}
?>
এখানে, প্রথমে ফাইলটি আপলোড করা হয় এবং সফল হলে ডেটাবেজে ফাইলের নাম, সাইজ, টাইপ এবং পাথ সংরক্ষণ করা হয়।
ডেটাবেজে ফাইল সংরক্ষণ
ফাইলটি ডেটাবেজে বাইনারি ফরম্যাটে সংরক্ষণ করার জন্য BLOB (Binary Large Object) ফিল্ড ব্যবহার করা হয়। এই পদ্ধতিতে ফাইলটি সরাসরি ডেটাবেজের ভিতরে স্টোর হয়, কিন্তু এটি সাধারণত কম পারফরম্যান্সের হতে পারে।
<?php
if(isset($_FILES['file'])){
$file = $_FILES['file']['tmp_name'];
$file_content = file_get_contents($file);
// ডেটাবেজ সংযোগ
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$stmt = $conn->prepare("INSERT INTO files (file_content) VALUES (?)");
$stmt->bind_param("s", $file_content);
$stmt->execute();
$stmt->close();
echo "File uploaded to database successfully";
$conn->close();
}
?>
এখানে, ফাইলের কনটেন্ট file_get_contents() ফাংশন দিয়ে নেয়া হয় এবং সেটি BLOB ফিল্ডে ইনসার্ট করা হয়।
সিকিউরিটি মেজারস: ফাইল স্টোরেজের ক্ষেত্রে
ফাইল স্টোরেজের সাথে সংশ্লিষ্ট নিরাপত্তা বিষয়ক নানা পদক্ষেপ নিতে হয়, যাতে ফাইল আপলোডের সময় অবাঞ্ছিত বা বিপজ্জনক ফাইল সিস্টেমে প্রবেশ না করে। নিচে কিছু গুরুত্বপূর্ণ সিকিউরিটি মেজারস দেয়া হলো:
১. ফাইল টাইপ ভ্যালিডেশন
ফাইলের টাইপ চেক করা খুবই গুরুত্বপূর্ণ। শুধু নির্দিষ্ট ধরনের ফাইল (যেমন .jpg, .png, .pdf) অনুমোদিত হওয়া উচিত।
$allowed_types = array("jpg", "jpeg", "png", "pdf");
$file_extension = pathinfo($file_name, PATHINFO_EXTENSION);
if (!in_array(strtolower($file_extension), $allowed_types)) {
echo "Invalid file type!";
exit;
}
২. ফাইল সাইজ চেক করা
অতিরিক্ত বড় ফাইল আপলোড প্রতিরোধ করতে ফাইল সাইজ চেক করা প্রয়োজন।
$max_size = 5 * 1024 * 1024; // 5MB
if ($file_size > $max_size) {
echo "File is too large!";
exit;
}
৩. ফাইল নামের স্যানিটাইজেশন
ফাইলের নামের মধ্যে স্পেশাল ক্যারেক্টার বা সিকিউরিটি রিস্ক হতে পারে। ফাইল নামটি স্যানিটাইজ করা উচিত যাতে সিস্টেমের কোনো সমস্যা না হয়।
$file_name = preg_replace("/[^a-zA-Z0-9\._-]/", "", $file_name);
৪. ডিরেক্টরি পারমিশন এবং ফাইল স্টোরেজ
ফাইল আপলোডের সময় ডিরেক্টরির পারমিশন খুবই গুরুত্বপূর্ণ। আপলোড ডিরেক্টরিতে শুধুমাত্র লিখার অনুমতি দিতে হবে, পড়ার নয়। এছাড়া ফাইলের নাম বা ডিরেক্টরি structure ভালোভাবে সিস্টেমে রাখুন যাতে কোনো ধরনের ডিরেক্টরি ট্রাভার্সাল (Directory Traversal) আক্রমণ না ঘটে।
chmod 755 uploads/
৫. ফাইল আপলোড পাথ এবং URL সেফ
ফাইল আপলোড পাথটি সেফ রাখার জন্য কখনই ডিরেক্টরি ট্রাভার্সাল করতে পারবেন এমন কোনও পাথ সেভ করবেন না। ফাইলের জন্য নির্দিষ্ট সেফ ফোল্ডার ব্যবহার করুন এবং ওয়েব সার্ভারের URL থেকে আলাদা রাখুন।
ফাইল স্টোরেজ সিস্টেমের সাথে সিকিউরিটি মেজারস গুরুত্বপূর্ণ হয়ে ওঠে বিশেষত যখন আপনি কোনো ওয়েব অ্যাপ্লিকেশন তৈরি করছেন যেখানে ব্যবহারকারীরা ফাইল আপলোড করতে পারে। ফাইল আপলোডের সময় সঠিক সিকিউরিটি মেজারস গ্রহণ করলে আপনার সিস্টেম অনেক বেশি নিরাপদ হবে।
Read more